/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pro.dao;

/**
 *
 * @author Cyndi
 */
import pro.bean.*;
import java.sql.*;
import java.util.ArrayList;
/**
 *
 * @author Niko
 */
public class PxLDAO extends Dbase{

    public ArrayList<PuntoxLink> puntoxLink(int idLink) throws SQLException {

        this.init_mysql();
        PreparedStatement stmt = null;
        ResultSet rs = null;
        ArrayList<PuntoxLink> listaPuntos = new ArrayList<PuntoxLink>();
        try {
            String sql = "SELECT idpuntos_x_lb,potencia_tx,perdida_linea,ganancia_ant,altura_ant,link_budget_idlink_budget,";
            sql += " puntos_idpuntos,nombre,latitud,altitud,es_pto_principal,notas";
            sql += " FROM puntos_x_lb l inner join puntos p on p.idpuntos=l.puntos_idpuntos";
            sql += " WHERE link_budget_idlink_budget= "+ idLink;
            sql += " ORDER BY 6,7 ";
            stmt = conn.prepareStatement(sql);
            rs = stmt.executeQuery(sql);

            PuntoxLink nuevoPunto = null;
            while (rs.next()) {
                nuevoPunto = new PuntoxLink();
                nuevoPunto.setIdPxL(rs.getInt(1));
                nuevoPunto.setPot(rs.getFloat(2));
                nuevoPunto.setPerdida(rs.getFloat(3));
                nuevoPunto.setGanancia(rs.getFloat(4));
                nuevoPunto.setAltura(rs.getFloat(5));
                nuevoPunto.setIdLink(rs.getInt(6));
                nuevoPunto.setIdPunto(rs.getInt(7));
                nuevoPunto.setNombre(rs.getString(8));
                nuevoPunto.setLatitud(rs.getFloat(9));
                nuevoPunto.setAltitud(rs.getFloat(10));
                nuevoPunto.setPrincipal(rs.getBoolean(11));
                nuevoPunto.setNotas(rs.getString(12));
                listaPuntos.add(nuevoPunto);
            }
        } finally {
            if (rs != null) {
                rs.close();
                rs = null;
            }
            if (stmt != null) {
                stmt.close();
                stmt = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }
        }
        return listaPuntos;
    }
    
    public ArrayList<PuntoxLink> puntoxLinkxProyecto(int idProyecto) throws SQLException {

        this.init_mysql();
        PreparedStatement stmt = null;
        ResultSet rs = null;
        ArrayList<PuntoxLink> listaPuntos = new ArrayList<PuntoxLink>();
        try {
            String sql = "SELECT idpuntos_x_lb,potencia_tx,perdida_linea,ganancia_ant,altura_ant,link_budget_idlink_budget,";
            sql += " puntos_idpuntos,nombre,latitud,altitud,es_pto_principal,notas";
            sql += " FROM puntos_x_lb l inner join puntos p on p.idpuntos=l.puntos_idpuntos";
            sql += " inner join link_budget b on b.idlink_budget=l.link_budget_idlink_budget";
            sql += " WHERE proyectos_idproyectos= "+ idProyecto;
            sql += " ORDER BY 6,7 ";
            stmt = conn.prepareStatement(sql);
            rs = stmt.executeQuery(sql);

            PuntoxLink nuevoPunto = null;
            while (rs.next()) {
                nuevoPunto = new PuntoxLink();
                nuevoPunto.setIdPxL(rs.getInt(1));
                nuevoPunto.setPot(rs.getFloat(2));
                nuevoPunto.setPerdida(rs.getFloat(3));
                nuevoPunto.setGanancia(rs.getFloat(4));
                nuevoPunto.setAltura(rs.getFloat(5));
                nuevoPunto.setIdLink(rs.getInt(6));
                nuevoPunto.setIdPunto(rs.getInt(7));
                nuevoPunto.setNombre(rs.getString(8));
                nuevoPunto.setLatitud(rs.getFloat(9));
                nuevoPunto.setAltitud(rs.getFloat(10));
                nuevoPunto.setPrincipal(rs.getBoolean(11));
                nuevoPunto.setNotas(rs.getString(12));
                listaPuntos.add(nuevoPunto);
            }
        } finally {
            if (rs != null) {
                rs.close();
                rs = null;
            }
            if (stmt != null) {
                stmt.close();
                stmt = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }
        }
        return listaPuntos;
    }    
    
    public ArrayList<Link> linkxProyecto(int idProyecto) throws SQLException {

        this.init_mysql();
        PreparedStatement stmt = null;
        ResultSet rs = null;
        ArrayList<Link> listaLink = new ArrayList<Link>();
        try {
            String sql = "SELECT idlink_budget,descripcion,frecuencia,distancia,proyectos_idproyectos";
            sql += " FROM link_budget";
            sql += " WHERE proyectos_idproyectos= "+ idProyecto;
            sql += " ORDER BY 1,2";
            stmt = conn.prepareStatement(sql);
            rs = stmt.executeQuery(sql);

            Link nuevoLink = null;
            while (rs.next()) {
                nuevoLink = new Link();
                nuevoLink.setIdLink(rs.getInt(1));
                nuevoLink.setDesc(rs.getString(2));
                nuevoLink.setFrec(rs.getFloat(3));
                nuevoLink.setDist(rs.getFloat(4));
                nuevoLink.setIdProyecto(rs.getInt(5));
                listaLink.add(nuevoLink);
            }
        } finally {
            if (rs != null) {
                rs.close();
                rs = null;
            }
            if (stmt != null) {
                stmt.close();
                stmt = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }
        }
        return listaLink;
    }
    
    public void registrarPunto(PuntoxLink punto) throws SQLException {
        Connection conn = null;
        PreparedStatement pstmt = null;
        try {
            conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb");
            conn.setAutoCommit(false);
            String sql = "insert into puntos_x_lb"
                    + " values (?,?,?,?,?,?,?)";
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, nuevoId());
            pstmt.setFloat(2, punto.getPot());
            pstmt.setFloat(3, punto.getPerdida());
            pstmt.setFloat(4, punto.getGanancia());
            pstmt.setFloat(5, punto.getAltura());
            pstmt.setInt(6, punto.getIdLink());
            pstmt.setInt(7, punto.getIdPunto());
            pstmt.executeUpdate();
            conn.commit();
        } finally {
            if (pstmt != null) {
                pstmt.close();
                pstmt = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }
        }
    }
    
    public Integer nuevoId() throws SQLException {
        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        Integer nuevoId = null;
        try {

            conn.setAutoCommit(false);
            String sql = "SELECT (CASE WHEN max(idpuntos_x_lb) IS NULL THEN 0 ELSE max(idpuntos_x_lb) END) + 1 FROM puntos_x_lb";
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();

            if (rs.next()) {
                nuevoId = rs.getInt(1);
                nuevoId = nuevoId == null ? 1 : nuevoId;
            }
        } finally {
            if (pstmt != null) {
                pstmt.close();
                pstmt = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }

        }
        return nuevoId;
    }     
    
    
}
